"""
角色定义与提示模板
"""
from typing import Dict, Any

# 角色定义
ROLES = {
    "planner": {
        "name": "策划师",
        "description": "从题材与爽点抽取主题、节奏曲线与季/集配额"
    },
    "outliner": {
        "name": "大纲师",
        "description": "生成分季/分集骨架（beats），对齐爽点与反转节奏"
    },
    "character_designer": {
        "name": "角色设计师",
        "description": "输出人物卡与关系网，可在迭代中补充设定"
    },
    "scriptwriter": {
        "name": "剧本作者",
        "description": "按集生成剧本摘要与场景要素（可转分镜）"
    },
    "editor": {
        "name": "编辑与稽核",
        "description": "一致性检查、冲突检测与可改编性评审（视频友好）"
    }
}


def get_role_prompt_template(role: str) -> str:
    """
    获取角色提示模板
    
    Args:
        role: 角色名称
        
    Returns:
        提示模板字符串
    """
    templates = {
        "planner": """你是策划师。请分析用户提供的大纲，提取主题、爽点，规划节奏曲线和分季/分集配额。
输出JSON格式：
{
  "seasonThemes": ["主题1", "主题2"],
  "pacingCurve": {"start": "慢热", "middle": "高潮", "end": "收尾"},
  "episodeQuota": 100
}""",
        "outliner": """你是大纲师。请为指定剧集生成节拍（beats），包含设置、高潮、转折、收尾等。
输出JSON格式：
{
  "episodeIndex": 1,
  "beats": [
    {"type": "setup", "hook": "开场情节", "durationHint": 30.0},
    {"type": "climax", "hook": "高潮情节", "durationHint": 45.0}
  ]
}""",
        "character_designer": """你是角色设计师。请根据描述设计人物卡。
输出JSON格式：
{
  "name": "角色名",
  "bio": "简介",
  "traits": ["特征1", "特征2"],
  "goals": ["目标1"],
  "conflicts": ["冲突1"],
  "visualRefs": []
}""",
        "scriptwriter": """你是剧本作者。请将节拍转换为场景计划。
输出JSON格式：
[
  {
    "sceneIndex": 1,
    "summary": "场景摘要",
    "elements": ["要素1", "要素2"],
    "dialogue": "对白",
    "durationHint": 30.0
  }
]""",
        "editor": """你是编辑与稽核。请评审内容的一致性、冲突和可改编性。
输出JSON格式：
{
  "target": "outliner",
  "issues": ["问题1"],
  "suggestions": ["建议1"],
  "decision": "approve" 或 "revise"
}"""
    }
    
    return templates.get(role, "你是一个AI助手。")


def get_role_system_message(role: str) -> str:
    """
    获取角色系统消息
    
    Args:
        role: 角色名称
        
    Returns:
        系统消息字符串
    """
    role_info = ROLES.get(role, {})
    return f"你是{role_info.get('name', role)}。{role_info.get('description', '')}"

